#include <time.h>
#define BOOKMARKS_FILENAME ".gtk-bookmarks"
-#define BOOKMARKS_TMP_FILENAME ".gtk-bookmarks-XXXXXX"
#define HIDDEN_FILENAME ".hidden"
}
static char *
-bookmark_get_filename (gboolean tmp_file)
+bookmark_get_filename (void)
{
char *filename;
filename = g_build_filename (g_get_home_dir (),
- tmp_file ? BOOKMARKS_TMP_FILENAME : BOOKMARKS_FILENAME,
- NULL);
+ BOOKMARKS_FILENAME, NULL);
g_assert (filename != NULL);
return filename;
}
gchar *contents;
gboolean result = FALSE;
- filename = bookmark_get_filename (FALSE);
+ filename = bookmark_get_filename ();
*bookmarks = NULL;
if (g_file_get_contents (filename, &contents, NULL, error))
}
static gboolean
-bookmark_list_write (GSList *bookmarks, GError **error)
+bookmark_list_write (GSList *bookmarks,
+ GError **error)
{
- char *tmp_filename;
+ GSList *l;
+ GString *string;
char *filename;
- gboolean result = TRUE;
- FILE *file;
- int fd;
- int saved_errno;
-
- /* First, write a temporary file */
+ GError *tmp_error = NULL;
+ gboolean result;
- tmp_filename = bookmark_get_filename (TRUE);
- filename = bookmark_get_filename (FALSE);
+ string = g_string_new ("");
- fd = g_mkstemp (tmp_filename);
- if (fd == -1)
+ for (l = bookmarks; l; l = l->next)
{
- saved_errno = errno;
- goto io_error;
+ g_string_append (string, l->data);
+ g_string_append_c (string, '\n');
}
- if ((file = fdopen (fd, "w")) != NULL)
- {
- GSList *l;
-
- for (l = bookmarks; l; l = l->next)
- if (fputs (l->data, file) == EOF
- || fputs ("\n", file) == EOF)
- {
- saved_errno = errno;
- goto io_error;
- }
+ filename = bookmark_get_filename ();
- if (fclose (file) == EOF)
- {
- saved_errno = errno;
- goto io_error;
- }
+ result = g_file_set_contents (filename, string->str, -1, &tmp_error);
- if (rename (tmp_filename, filename) == -1)
- {
- saved_errno = errno;
- goto io_error;
- }
+ g_free (filename);
+ g_string_free (string, TRUE);
- result = TRUE;
- goto out;
- }
- else
+ if (!result)
{
- saved_errno = errno;
-
- /* fdopen() failed, so we can't do much error checking here anyway */
- close (fd);
+ g_set_error (error,
+ GTK_FILE_SYSTEM_ERROR,
+ GTK_FILE_SYSTEM_ERROR_FAILED,
+ _("Bookmark saving failed: %s"),
+ tmp_error->message);
+
+ g_error_free (tmp_error);
}
- io_error:
-
- g_set_error (error,
- GTK_FILE_SYSTEM_ERROR,
- GTK_FILE_SYSTEM_ERROR_FAILED,
- _("Bookmark saving failed: %s"),
- g_strerror (saved_errno));
- result = FALSE;
-
- if (fd != -1)
- unlink (tmp_filename); /* again, not much error checking we can do here */
-
- out:
-
- g_free (filename);
- g_free (tmp_filename);
-
return result;
}